   /\                                                     /\
  /__\===================================================/__\
 /\  /\   THE LEGEND OF ZELDA: TWO SWORDS (Beta Demo)   /\  /\
/__\/__\===============================================/__\/__\


By Noproblo Games
Released Aug. 5, 2006


=-=-=-=-=-=-=-=-=-=-=-=-=

Contents:
01) About Two Swords
02) How to Play
03) Things to Try
04) Production Notes
05) Credits & Thanks

=-=-=-=-=-=-=-=-=-=-=-=-=


   /\                                                     /\
  /__\===================================================/__\
 /\01/\         A B O U T   T W O   S W O R D S         /\01/\
/__\/__\===============================================/__\/__\


Practice up and go grab a friend. Being brought to you after nearly two years of solo work, The Legend of Zelda: Two Swords has reached the Beta Demo stage. Now, for the first time, two players can go head-to-head in a fully playable taste of what's to come.

Two Swords was inspired by an unknown 90's DOS game called Wibbles (2): The Stupid Challenge, a split-screen deathmatch between segmented worms. The inability to play this classic party hit on modern computers led me to ponder re-creating it with Game Maker 5.3, and having been a member of Zelda Fan Game Central naturally made me think of a Zelda edition.

Many features from Wibbles 2 were paralleled with Zelda elements; the body segments trailing the player's "head" become Link's fairy followers, both can be sacrificed as bombs to harm your opponent and destroy scenery to reveal power-ups, stray fairies replace the wandering insects eaten to lengthen your "chain", turbo boosts become magic spells, the tongue attack used to break your opponent's chain is now Link's trademark sword, and just like Wibbles 2, you can choose from a selection of coloured outfits, each with its own special powers.

Among the new additions in Two Swords are life-bars; rather than devouring your opponents from behind, you're now out to bludgeon them to death while building your fairy chain, and stealing from theirs. You'll find some new Zelda weapons such as the Bow and Arrow, multi-planar combat over bridges and through tubes, and the ability to spend your hard-earned rupees in between rounds on new items and equipment.

The Legend of Zelda: Two Swords was designed to have a bit of a learning curve, but will hopefully be a fun action game with a satisfying amount of strategic excitement. Enjoy the demo!

- Captain Goodnight


=-=-=-=-=-=-=-=-=-=-=-=-=


   /\                                                     /\
  /__\===================================================/__\
 /\02/\              H O W   T O   P L A Y              /\02/\
/__\/__\===============================================/__\/__\


First and foremost, ZTS is for TWO PLAYERS only. You can explore the game and practice your techniques alone, but both players require humans controlling them!

There are two ways to play ZTS:

1) Fairies Game
Collect as many fairies as possible in each round to reach your goal. It makes no difference who wins the match, but the winner is free to raid the loser's supply. You choose the goal: 15, 45, 75, 150, or 300 fairies.

2) Wins Game
Those pesky fairies still want to get in the way, but this time it's about the Win/Loss record. Choose between a 1-round game, first to 5, 10, or 25 wins, or even a marathon 50 wins.

=-=-=-=-=-=-=-=

CONTROLS:

The title screen is controlled using the Arrow Keys, Enter, and Escape. Once you begin the game, you can calibrate each player's controls.

** NOTE **
Due to keyboard constraints, it is highly recommended to play Two Swords using at least one 4-button joystick (or gamepad).

The onscreen text will guide you through Control Calibration. Selections on the left are for Player 1, right are for Player 2.

To calibrate a joystick, press Enter over one of the joystick selections and follow Link's instructions.


ACTION/ATTACK: In most cases, this context-sensitive button produces a swipe of Link's sword. If you have a Bow, double-tap it quickly to fire an Arrow. Once you've dropped a bomb, walk against it and press to pick it up, then press again to throw before it 'splodes! With the power of the Gold Gauntlet, you can throw rocks as well. Hold this while running (magic) to perform the sword-dash attack.

BOMB: Press this to turn the final fairy in your chain into an all-purpose explosive device with a 4-second fuse. If you own the Bomber's Badge, hold this for at least 1/3 of a second after you set up us the bomb, then release it to remote-detonate.

MAGIC: Give this button a tap for several seconds worth of double-speed. There may be other uses for magic as well!

SHIELD: Hold this button to turtle behind your trusty shield. It blocks most sword and arrow attacks that come from the front, and may even protect you from explosions if you're lucky.


To calibrate the keyboard, press Enter to be taken to a new menu. There are five different "Modes" each for directional keys and action buttons, each with preset buttons. Press Left to select a directional mode, or Right to select an action mode, Then use Up and Down to cycle between modes. You can rotate the keys within a mode by pressing Enter on that selection, then using Up, Down, and Enter to select two buttons to switch. To finalize your keyboard controls, select "Done" and press Enter.

When each player has chosen a controller, and there are no overlapping buttons, you can then save your control settings and enter the game. Your chosen controllers take effect after exitting the calibration screen.

=-=-=-=-=-=-=-=

SELECTION:

It now begins! After calibration, you'll be taken to the Select Player screen, complete with player statistics and Mortal Kombat style character icons. First, select an incarnation of Link that best suits your style.

GREEN LINK: The Heroic
RED LINK: The Furious
BLUE LINK: The Swift
PURPLE LINK: The Magical
YELLOW LINK: The Mighty
ORANGE LINK: The Lucky

You can change your selection before the round begins, and in between every round.

After selecting your player, you are given some new options. If you've earned any rupees in battle, you can spend them on new items and equipment, including one full Heart Container per round! You can also select between 0 and 10 fairies from your reserve to bring into battle, or select a new control setup.

When selecting new controls, you cannot choose a keyboard mode or joystick that the other player is currently using. To let the other player take over your controller, first select the "Remove" option or choose a different controller. Changes take effect when you're finished.

Finally, you can either step back and select a different Link, or begin the round. The player who selects the level alternates each round (although there's only one level in this demo!)

=-=-=-=-=-=-=-=

GAMEPLAY:

It's time to scout the playing field, and hone your skills. You will notice that you can't walk diagonally - this is intentional, due to the game's grid-based nature. Don't worry, Wibbles was like that too. You'll also soon find that you can't walk through your own chain of fairies. Well, that sucks, doesn't it? Again, this is part of the game - you have to learn to manage your own chain while fighting the opponent, to both defend it and to use bombs to your advantage, as well as making sure you don't get stuck! Boy, that would be embarrassing if you did.

Underneath bushes, inside rocks, and scattered about the level are tons of power-ups... and poisons.

TRIFORCE POWER: First clears up any illness Link is suffering from, then whatever power is left over becomes temporary invincibility!

THE VANISH CAP (clever name, huh?): Makes you temporarily invisible to your opponent. They could just watch YOUR side of the screen, but that's easier said than done. Trust the Wibbles.

Sometimes you'll find a mystery "?" bonus - this could be a rupee, a heart container, a pack of arrows, a power-up of some kind, or it could be one of 4 types of nasty spirits:

JINXED: You can't use your sword!
CURSED: Your speed is cut in half!
POISONED: Your health decreases!
MADNESS: Your fairies turn suicidal!

Each round has a 10-minute time limit. When you've defeated your opponent, you will have several seconds to scour the area for fairies or other treasures, before being taken to the Results screen. Don't forget, you can still die during this time!

=-=-=-=-=-=-=-=

OTHER CONTROLS:

Press Esc to pause and unpause the game.

While paused, press F2 to quit the current game and return to the title screen, or F4 to declare the current round a draw but continue the war. Both options will prompt you with Y or N to make your decision.

Press F12 to change the detail level from Medium to High to Low. Low detail removes many special effects, shadows, and particles, while High detail increases the abundancy of alpha-transparency effects.

Press PageDown during gameplay to rotate the two players' views into between horizontal and vertical alignment.

To quit the game entirely, click the "X" in the top-right corner of the window, or exit to the title screen and select the "Quit" option from there.


=-=-=-=-=-=-=-=-=-=-=-=-=


   /\                                                     /\
  /__\===================================================/__\
 /\03/\            T H I N G S   T O   T R Y            /\03/\
/__\/__\===============================================/__\/__\


The Two Swords game engine was made with detail in mind, so there are lots of ways to interact with the environment! Here are just a few things to try out:

 - Shoot an arrow through a lit torch to set it on fire.

 - Shoot a fiery arrow through an unlit torch to light it up!

 - Shoot a fiery arrow into a patch of bushes and watch them go up in flames. Burned bushes take a longer time to regrow. After all, you've burned them.

 - Try throwing a bomb, and detonating it in mid-air with the Bomber's Badge.

 - A bomb's explosive power depends on the distance to its target, which includes its mid-air height! Normally, a mid-air explosion will do less damage to an opponent, unless of course the bomb directly hits them, or explodes underneath the vine bridge they happen to be walking on.

 - Rocks can be blown up, and typically give better bonuses than bushes. Naturally!

 - The distance a rock a bomb can be thrown depends on several factors, including your movement speed and ownership of the Gold Gauntlet.

 - You can even throw them up or down sets of stairs.

 - With some extra might, rocks can be pushed around. Try pushing one inside a tube to set a trap, or over some long grass to cut it up.

 - Link doesn't have a full sword range when he's walking through a tube, so he'll only make short stabs.

 - Link suffers more damage when he's attacked from behind. That's just the nature of the beast.

 - Be careful not to get hit while you're holding a rock or a bomb, or you'll take extra damage.

 - The Vanish Cap may make you invisible, but your opponent can still see anything that you're carrying, or the rustling of any tall grass you try to sneak through.

 - Where are all those fairies coming from, anyways??


=-=-=-=-=-=-=-=-=-=-=-=-=


   /\                                                     /\
  /__\===================================================/__\
 /\04/\         P R O D U C T I O N   N O T E S         /\04/\
/__\/__\===============================================/__\/__\


Two Swords has been in development for about two years, but much of this time was spent in long breaks for deliberation, exhaustion, or disappointment with lag issues. Considering these breaks, the total development time is probably closer to a little over one year. During the development of Two Swords, I also produced two other games: Duck Doom Deluxe, which was featured on G4TV's "Attack of the Show" and became a worldwide hit, and World's Smallest Tetris, which the world should hit me for making. Both games can be downloaded at Game Maker Community, http://forums.gamemaker.nl or by contacting me.

Several technical engine demos were released early on, some of which gave me a false sense of completion. At one point I had the total progress pegged at over 30%, when it would later turn out to be about 10%. In May of 2005, the Alpha Demo was released, boasting a finish-enough-to-be-playble-but-not-very-refined game engine for one player to tool around with, in a level nearly identical to the one in Beta. A short time later, the demo was re-issued with customisable controls. It was named ZFGC's June 2005 Fan Game of the Month. Thank you.. thank you.

Nearly every aspect of the game engine was overhauled at least once during the course up until now, either to make compatible with a new feature being added, to eliminate bugs due to poor planning or GM knowledge, or for the aforementioned troubles with lag. I began this project because I felt my GM skills were adequate for the job, but you could say that my knowledge and abilities have at least doubled since first setting out. Yet, only one "registered" feature is used in the entire game.

Originally, the game engine was much more like Wibbles 2, in that Link would always be walking forwards, only using the arrow keys to turn. Shielding, a new concept to the engine, was done by holding the arrow opposite to your direction. After some debating, public misunderstanding of the idea, and testing the alternatives, I decided to switch to traditional Zelda movement.

Another Wibbles gimmick was how you could break your opponent's chain of fairies by walking through it. You could of course accomplish this with the sword, an arrow, or a bomb, but it was only recently that I decided to make the opponent's chain solid, forcing you to melee.

For a very short time early on, Link even moved in intervals of 16 pixels. While it worked for the Wib', this looked way too choppy and slow for the Zelda genre, and was reduced to 4 pixel movements.

There are many features of the Two Swords game engine that would go undetected to most players, so here I will explain the details of some of them.

 - Movement: Normally, Game Maker runs its keyboard events in a pre-set order, so that when holding multiple arrows, one always takes precedence over the others. Coding your own system to specify the "dominant" arrow keys is commonly known as "prioritised movement". In Two Swords, movement is not prioritised by keys, but instead by the order in which you press the keys; the most recent arrow being the direction you move in. This system took a lot of planning, variables, and careful code structuring. If for instance you hold Down, and then hold Left, you will start to walk left. Then if you release left, you will be walking down again, or instead if you release Down and then hold it again, it becomes the most recent direction, so you will walk down again. The movement engine still requires a few tweaks for the next release. A bug exists which lets you get stuck inside your own chain by making certain short movements, and I'd like to add corner-cutting to help reduce collision delays.

 - Collisions: ZTS uses an entirely customized collision engine. Hardly any of the "solid" objects actually use GM's built-in solidity property. When Link is moving, his collision mask juts out an additional 1 pixel in the direction he's facing, to detect collisions with "solid" objects, compare their distances and planar levels, and stop Link's movement if necessary. This is done for two reasons. 1) The multiplanar system; players need to be able to walk overtop of, or underneath, "solid" objects on the other level. Because there are two players, I can't just switch the solidity on or off for certain objects at certain times. And 2) When Link runs, he sometimes moves TWICE within a step. Because of this, I need to "double-check" for collisions manually, rather than relying on GM's per-step detection.

 - Characters: All 6+ colours of Link use a single object for each player, rather than one for each colour for each player. The character's sprites and abilities are all determined by way of a global character variable.

 - Dynamic Luck: The items that fall from destroyed bushes and rocks depend on what equipment you have, and which Link you're playing as. For example, you won't get arrows if you don't have a bow, and Orange Link, being "The Lucky", gets better items on average. The dynamic luck script lets me assign a probability number to each item depending on the player's conditions, and the chances of receiving that item are its number divided by the total of all numbers. That way I can quickly adjust the luck without relying on a mess of random() functions or dice rolls.

 - Player Status: Each player has two "status slots" in their HUD, which are for time-controlled power-ups such as the Vanish Cap, Triforce, or the four poisons. When you obtain one of these, its power time is added to any time already existing for that item. If there is none, it fills the first available status slot with that item. Touching a Triforce takes removes time from an existing poison, if you have one.

 - Swordplay: When Two Swords collide, a system is set up to create imaginary line segments based on the swords' lengths and angles. Then a line intersection script is used to create sparks at the EXACT position where the swords crossed. This system could use some improvement for the next release.

 - Backgrounds: One of the major sources of lag during production, which almost caused the game's cancellation, was discovered to be GM's apparent trouble in blitting the entire background image down to the view-sized portions twice per step. I came up with a system (which I call the "Background Bitch") that breaks the level's background image into squares no larger than 256x256, loads them into an array when the round begins, and then for each player, every step, determines the lowest and highest array numbers that need to be drawn to fill the view, and only draws those. The recurring lag rate of 7-8 fps dropped to virtually none.

 - 3D Triforce: You may recall this game is made with GM 5.3, which has no 3D mode. That means those fancy Triforces are made entirely with code to get an angle-limited, pseudo-3D image.

 - Fairy Formations: Those fairies that fly into position on the Results screen aren't following any paths or preset co-ordinates. When each "flying fairy" is created, it runs through an algorithm to figure out its place on the Triforce backdrop, based on the number of instances so far, and the target number of fairies for the game. This code finds which Triforce piece it should land on, which "loop" from the centre to the outer edge, which of the 3 sides, and how far along that side it should go, then mathematically translates this data into a single (x,y) position. The actual flying is done using a combination of gravity and invisible, moving targets.

 - Controls: I saved this for last because it's the most difficult to explain, and you probably won't even care anyways. No keyboard/joystick events are used to control the players. Because the players must be able to switch controllers between the keyboard and the joystick, as well as remap the buttons, each player's controls are stored in a global 2D array. The first dimension is the button number (directions are 0 to 3, actions are 4 to 7) and the second dimension is 0 for the keycode or joystick button, and 1 for whether or not it's being held, which needs to be kept track of, to simulate "Press" and "Release" events. For example: global.P1controls[2,0] stores the keycode for Player One's left direction, while global.P2controls[4,1] will always be true or false, telling whether or not player 2 is holding the Attack button. To detect controls, a single script is used with the button number argument (0 to 7), which determines which controller (keyboard or joystick) the player uses, checks the appropriate function along with the keycode from the global array, and finally, returns true or false to tell if it's being held. All the button checks for an object are done during its Begin Step event, and corresponding actions are done by calling scripts containing the action code. In addition to
 key mapping, this is also necessary because GM doesn't have built-in Press or Release events for joystick controls.

Fact: This demo was completed with less than 15 minutes until the project deadline.


=-=-=-=-=-=-=-=-=-=-=-=-=


   /\                                                     /\
  /__\===================================================/__\
 /\05/\         C R E D I T S   &   T H A N K S         /\05/\
/__\/__\===============================================/__\/__\


A kudo or two for Nintendo, for creating The Legend of Zelda and the many resources used without permission in this game.

Two Swords was designed and coded entirely by Goodnight in Game Maker 5.3.

All sprite/tile rips, edits, and original graphics by Goodnight, except for animated fairy base by Aliento, and grass texture overlay by proMonkey.

All sound effects recorded/edited by Goodnight.

All music sequenced by Goodnight.
Battle music composed by Koji Kondo and MOKA.
Calibration and Selection music arranged by Goodnight, based on compositions by Koji Kondo.
Intro/Title and Results music composed by Goodnight.

Thanks to Devis0r for guidance with tile ripping.

Thanks to Dayjo for the seriously awesome hosting.

Thanks to the gurus at Game Maker Community who helped me figure out GM's stupid quirks.

Thanks to a few ZFGC friends for support and offering to help, even when there wasn't much of an opportunity for helping. The rest of you suck-diddly-uck. Buy my merchandise.

Thanks to D'India Software for Wibbles 2, inspiration for Two Swords and one of my favourite games ever.


Comments? Contact me by e-mail: HelpTheWretched@yahoo.ca
Or at ZFGC: http://www.zfgc.com (as Goodnight)
Or at GMC: http://forums.gamemaker.nl (as HelpTheWretched)